package com.h.chatroom.common.util;


import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class SecurityUtils {
    // 对密码进行加密
    /**
     * 利用随机盐值，对密码进行更安全的加密
     * @param password
     * @return
     */
    public static String encrypt(String password) {
        // 利用 加盐 对其密码记性加密 使 MD5 记性更高的加密
        // 随机生成 32的盐值
        String salt = UUID.randomUUID().toString().replace("-", "");// replace() 对 盐值 进行处理，将其中的 - 进行修改成 空

        // 生成 32位 密文，把 盐值和密码进行一起加密
        String securityPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));

        // 返回 盐值 + 密文，一起返回 进行存储到数据库中
        return (salt + securityPassword);
    }

    // 对密码进行解密操作，判断输入的密码和注册的密码是否相等
    /**
     * 判断登录输入的密码是否是注册的密码，就是对其使用原盐值进行再次加密，进行判断
     * @param inputPassword
     * @param sqlPassword
     * @return
     */
    public static boolean verify(String inputPassword,String sqlPassword) {
        if (!StringUtils.hasLength(inputPassword)) {
            return false;
        }
        if(sqlPassword == null || sqlPassword.length() != 64) {
            return false;
        }
        // 根据sqlPassword 来获取盐值
        String salt = sqlPassword.substring(0,32);
        // 对于输入的密码，根据从 sqlPassword中截取的盐值 进行一起加密
        String securityPassword = DigestUtils.md5DigestAsHex((salt + inputPassword).getBytes(StandardCharsets.UTF_8));
        // 判断 新生成的密文 和 数据库中的 盐值加密文的值 是否是一致的
        return sqlPassword.equals((salt + securityPassword));
    }
}
